class Solution {
    public int search(int[] nums, int target) {
        // Time complexity: O(log2(n))
        // Space complexity: O(1)
        /*int left = 0, right = nums.length - 1;

        while(left <= right) {
            int mid = left + (right - left) / 2;

            if(nums[mid] == target) {
                return mid;
            } else if(nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }

        return -1;*/
        return searchRec(nums, target, 0, nums.length - 1);
    }
    private int searchRec(int[] nums, int target, int left, int right) {
        // Time complexity: O(log2(n))
        // Space complexity: O(log2(n))
        if(left > right) {
            return -1;
        }

        int mid = left + (right - left) / 2;
        if(nums[mid] == target) {
            return mid;
        } else if(nums[mid] < target) {
            return searchRec(nums, target, mid + 1, right);
        } else {
            return searchRec(nums, target, left, mid - 1);
        }
    }
}